#include <eepp/ui/doc/languages/makefile.hpp>
#include <eepp/ui/doc/syntaxdefinitionmanager.hpp>

namespace EE { namespace UI { namespace Doc { namespace Language {

void addMakefile() {

	SyntaxDefinitionManager::instance()->add(

		{ "Makefile",
		  { "^[Mm]akefile$", "%.mk$", "%.make$", "%.mak$", "^Makefile%.am$", "^Makefile%.in$" },
		  {
			  { { "#.*\n" }, "comment" },
			  { { "[[.]]}" }, "normal" },
			  { { "$[@^<%%?+|*]" }, "keyword2" },
			  { { "$%(", "%)" }, "keyword" },
			  { { "%f[%w_][%d%.]+%f[^%w_]" }, "number" },
			  { { "%..*:" }, "keyword2" },
			  { { ".*:=" }, "function" },
			  { { ".*+=" }, "function" },
			  { { ".*%s=" }, "function" },
			  { { "%:%(%)%{%}%|" }, "operator" },
			  { { "%.?[%a_][%w_]*" }, "symbol" },
		  },
		  {

			  { "define", "keyword" },
			  { "endef", "keyword" },
			  { "else", "keyword" },
			  { "endif", "keyword" },
			  { "ifdef", "keyword" },
			  { "ifeq", "keyword" },
			  { "ifndef", "keyword" },
			  { "export", "keyword" },
			  { "include", "keyword" },
			  { "load", "keyword" },
			  { "override", "keyword" },
			  { "undefine", "keyword" },
			  { "unexport", "keyword" },
			  { "vpath", "keyword" },
			  { "private", "keyword" },
			  { "if", "keyword" },
			  { "elseif", "keyword" },
			  { "elseifdef", "keyword" },
			  { "elseifndef", "keyword" },

			  { "abspath", "function" },
			  { "addprefix", "function" },
			  { "addsuffix", "function" },
			  { "basename", "function" },
			  { "dir", "function" },
			  { "join", "function" },
			  { "notdir", "function" },
			  { "realpath", "function" },
			  { "suffix", "function" },
			  { "wildcard", "function" },
			  { "and", "function" },
			  { "if", "function" },
			  { "or", "function" },
			  { "error", "function" },
			  { "info", "function" },
			  { "warning", "function" },
			  { "filter", "function" },
			  { "filter-out", "function" },
			  { "findstring", "function" },
			  { "firstword", "function" },
			  { "lastword", "function" },
			  { "patsubst", "function" },
			  { "sort", "function" },
			  { "strip", "function" },
			  { "subst", "function" },
			  { "word", "function" },
			  { "wordlist", "function" },
			  { "words", "function" },
			  { "call", "function" },
			  { "eval", "function" },
			  { "file", "function" },
			  { "flavor", "function" },
			  { "foreach", "function" },
			  { "origin", "function" },
			  { "shell", "function" },
			  { "value", "function" },

			  { ".DEFAULT_GOAL", "keyword2" },
			  { ".FEATURES", "keyword2" },
			  { ".INCLUDE_DIRS", "keyword2" },
			  { ".LIBPATTERNS", "keyword2" },
			  { ".LOADED", "keyword2" },
			  { ".RECIPEPREFIX", "keyword2" },
			  { ".SHELLFLAGS", "keyword2" },
			  { ".SHELLSTATUS", "keyword2" },
			  { ".VARIABLES", "keyword2" },
			  { "COMSPEC", "keyword2" },
			  { "MAKESHELL", "keyword2" },
			  { "SHELL", "keyword2" },
			  { "GPATH", "keyword2" },
			  { "VPATH", "keyword2" },
			  { "MAKE", "keyword2" },
			  { "MAKECMDGOALS", "keyword2" },
			  { "MAKEFILES", "keyword2" },
			  { "MAKEFILE_LIST", "keyword2" },
			  { "MAKEFLAGS", "keyword2" },
			  { "MAKELEVEL", "keyword2" },
			  { "MAKEOVERRIDES", "keyword2" },
			  { "MAKE_RESTARTS", "keyword2" },
			  { "MAKE_TERMERR", "keyword2" },
			  { "MAKE_TERMOUT", "keyword2" },
			  { "MFLAGS", "keyword2" },
			  { "CURDIR", "keyword2" },
			  { "OUTPUT_OPTION", "keyword2" },
			  { "SUFFIXES", "keyword2" },
			  { "AR", "keyword2" },
			  { "ARFLAGS", "keyword2" },
			  { "AS", "keyword2" },
			  { "ASFLAGS", "keyword2" },
			  { "CC", "keyword2" },
			  { "CFLAGS", "keyword2" },
			  { "CO", "keyword2" },
			  { "COFLAGS", "keyword2" },
			  { "CPP", "keyword2" },
			  { "CPPFLAGS", "keyword2" },
			  { "CTANGLE", "keyword2" },
			  { "CWEAVE", "keyword2" },
			  { "CXX", "keyword2" },
			  { "CXXFLAGS", "keyword2" },
			  { "FC", "keyword2" },
			  { "FFLAGS", "keyword2" },
			  { "GET", "keyword2" },
			  { "GFLAGS", "keyword2" },
			  { "LDFLAGS", "keyword2" },
			  { "LDLIBS", "keyword2" },
			  { "LEX", "keyword2" },
			  { "LFLAGS", "keyword2" },
			  { "LINT", "keyword2" },
			  { "LINTFLAGS", "keyword2" },
			  { "M2C", "keyword2" },
			  { "MAKEINFO", "keyword2" },
			  { "PC", "keyword2" },
			  { "PFLAGS", "keyword2" },
			  { "RFLAGS", "keyword2" },
			  { "RM", "keyword2" },
			  { "TANGLE", "keyword2" },
			  { "TEX", "keyword2" },
			  { "TEXI2DVI", "keyword2" },
			  { "WEAVE", "keyword2" },
			  { "YACC", "keyword2" },
			  { "YFLAGS", "keyword2" },
			  { "bindir", "keyword2" },
			  { "DESTDIR", "keyword2" },
			  { "exec_prefix", "keyword2" },
			  { "libexecdir", "keyword2" },
			  { "prefix", "keyword2" },
			  { "sbindir", "keyword2" },

			  { "DEFAULT", "literal" },
			  { "DELETE_ON_ERROR", "literal" },
			  { "EXPORT_ALL_VARIABLES", "literal" },
			  { "IGNORE", "literal" },
			  { "INTERMEDIATE", "literal" },
			  { "LOW_RESOLUTION_TIME", "literal" },
			  { "NOTPARALLEL", "literal" },
			  { "ONESHELL", "literal" },
			  { "PHONY", "literal" },
			  { "POSIX", "literal" },
			  { "PRECIOUS", "literal" },
			  { "SECONDARY", "literal" },
			  { "SECONDEXPANSION", "literal" },
			  { "SILENT", "literal" },
			  { "SUFFIXES", "literal" },
		  },
		  "#",
		  {}

		} );
}

}}}} // namespace EE::UI::Doc::Language
